﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System;
using System.Runtime.InteropServices;

namespace Lcsoft.Data.RDBMS
{
	/// <summary>
	/// 提供一组方法和属性来获取或维护查询构造器。
	/// </summary>
	[ComVisible(true)]
	public static class SimpleSql
	{
		/// <summary>
		/// 执行存储过程并返回 <see cref="QueryBuilder{T}"/> 的实例。
		/// </summary>
		/// <param name="storedProcName">指定要查询的存储过程名称。</param>
		/// <returns>返回 <see cref="QueryBuilder{T}"/> 的实例。</returns>
		public static QueryBuilder<StoredProcedure> StoredProcedure(string storedProcName) { return new QueryBuilder<StoredProcedure>(new StoredProcedure(storedProcName)); }

		/// <summary>
		/// 执行存储过程并返回 <see cref="QueryBuilder{T}"/> 的实例。
		/// </summary>
		/// <param name="storedProcName">指定要查询的存储过程名称。</param>
		/// <param name="configName">指定包含数据库连接字符串的配置节的名称。</param>
		/// <returns>返回 <see cref="QueryBuilder{T}"/> 的实例。</returns>
		public static QueryBuilder<StoredProcedure> StoredProcedure(string storedProcName, string configName) { return new QueryBuilder<StoredProcedure>(new StoredProcedure(storedProcName, configName)); }

		/// <summary>
		/// 执行存储过程并返回 <see cref="QueryBuilder{T}"/> 的实例。
		/// </summary>
		/// <param name="storedProcName">指定要查询的存储过程名称。</param>
		/// <param name="connectionString">用来建立初始连接的连接字符串。该连接字符串的确切内容取决于此连接的特定数据源。默认值为空字符串。</param>
		/// <param name="provider">提供程序的固定名称。</param>
		/// <returns>返回 <see cref="QueryBuilder{T}"/> 的实例。</returns>
		public static QueryBuilder<StoredProcedure> StoredProcedure(string storedProcName, string connectionString, string provider) { return new QueryBuilder<StoredProcedure>(new StoredProcedure(storedProcName, connectionString, provider)); }

		/// <summary>
		/// 执行查询并返回 <see cref="QueryBuilder{T}"/> 的实例。
		/// </summary>
		/// <param name="sqlStatement">要执行的文本命令。默认值为空字符串 ("")。</param>
		/// <returns>返回 <see cref="QueryBuilder{T}"/> 的实例。</returns>
		public static QueryBuilder<Query> Query(string sqlStatement) { return new QueryBuilder<Query>(new Query(sqlStatement)); }

		/// <summary>
		/// 执行查询并返回 <see cref="QueryBuilder{T}"/> 的实例。
		/// </summary>
		/// <param name="sqlStatement">要执行的文本命令。默认值为空字符串 ("")。</param>
		/// <param name="configName">指定包含数据库连接字符串的配置节的名称。</param>
		/// <returns>返回 <see cref="QueryBuilder{T}"/> 的实例。</returns>
		public static QueryBuilder<Query> Query(string sqlStatement, string configName) { return new QueryBuilder<Query>(new Query(sqlStatement, configName)); }

		/// <summary>
		/// 执行查询并返回 <see cref="QueryBuilder{T}"/> 的实例。
		/// </summary>
		/// <param name="sqlStatement">要执行的文本命令。默认值为空字符串 ("")。</param>
		/// <param name="connectionString">用来建立初始连接的连接字符串。该连接字符串的确切内容取决于此连接的特定数据源。默认值为空字符串。</param>
		/// <param name="provider">提供程序的固定名称。</param>
		/// <returns>返回 <see cref="QueryBuilder{T}"/> 的实例。</returns>
		public static QueryBuilder<Query> Query(string sqlStatement, string connectionString, string provider) { return new QueryBuilder<Query>(new Query(sqlStatement, connectionString, provider)); }

		/// <summary>
		/// 创建事务处理的新实例。
		/// </summary>
		/// <returns>返回 <see cref="SimpleTransaction"/> 的新实例。</returns>
		public static SimpleTransaction CreateTransaction() { return new BaseQuery(String.Empty, false).CreateTransaction(); }

		/// <summary>
		/// 创建事务处理的新实例。
		/// </summary>
		/// <param name="configName">指定包含数据库连接字符串的配置节的名称。</param>
		/// <returns>返回 <see cref="SimpleTransaction"/> 的新实例。</returns>
		public static SimpleTransaction CreateTransaction(string configName) { return new BaseQuery(String.Empty, configName, false).CreateTransaction(); }

		/// <summary>
		/// 创建事务处理的新实例。
		/// </summary>
		/// <param name="connectionString">用来建立初始连接的连接字符串。该连接字符串的确切内容取决于此连接的特定数据源。默认值为空字符串。</param>
		/// <param name="sqlProvider">提供程序的固定名称。</param>
		/// <returns>返回 <see cref="SimpleTransaction"/> 的新实例。</returns>
		public static SimpleTransaction CreateTransaction(string connectionString, string sqlProvider) { return new BaseQuery(String.Empty, connectionString, sqlProvider, false).CreateTransaction(); }
	}
}
